Container的職責在於創建、配置與組裝bean,昨天我們學到了
如何使用bean標籤中autowire屬性為bean自動配置
今日將討論如何使用SpEL來讓我們更方便設定Bean
測試案例準備
public class Employee {
String empId;
String empName;
Double Salary;
UserRole role;
String title;
String dept;
//getter setter toString略
}
public class UserRole {
String roleName;
//getter setter toString略
}
public class UserInfo {
private String title;
private String dept;
//getter setter toString略
}
SpEL是Spring提供可以在runtime時期操作或查詢物件的一種語法,它有很多強大功能,但在這邊我們只會介紹在設定檔中SpEL會如何使用
語法形式為#{<expression string>}包覆expression
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="role" class="com.swj.UserRole">
<property name="roleName" value="部門主管"></property>
</bean>
<bean id="userInfo" class="com.swj.UserInfo">
<property name="title" value="經理"></property>
<property name="dept" value="資訊部"></property>
</bean>
<bean id="emp" class="com.swj.Employee">
<!-- literal -->
<property name="salary" value="#{26400*12}"></property>
<!-- 引用其它物件屬性 -->
<property name="title" value="#{userInfo.title}"></property>
<!-- 引用其它bean -->
<property name="role" value="#{role}"></property>
<!-- 調用靜態方法 -->
<property name="empId" value="#{ T(java.lang.Math).random() * 100.0}"></property>
<!-- 調用非靜態方法 -->
<property name="dept" value="#{userInfo.getDept}"></property>
</bean>
</beans>
@Test
public void testDay13(){
ApplicationContext ioc = new ClassPathXmlApplicationContext("bean13.xml");
System.out.println("容器啟動完成....");
Employee emp = ioc.getBean("emp",Employee.class);
System.out.println(emp);
}
Result
這個部分會留到註解注入再談,可以先參考連結說明